package test.math.lesson5;

import java.util.ArrayList;

public class Lesson5_1 {

    public static void main(String[] args) {

        Lesson5_1.get(10, new ArrayList<>());

    }



    public static long[] rewards = {1, 2, 5, 10};

    /**
     * 使用函数调用，找到所有奖金组合
     * @param totalReward 奖赏的总额
     * @param result 保存当前的解
     */
    public static void get(long totalReward, ArrayList<Long> result) {
        // 当totalReward = 0 时候， 证明它是满足条件的解，结束嵌套，输出解
        if (totalReward == 0) {
            System.out.println(result);
        }
        // 当totalReward < 0 时嘛证明是不满足条件的，不输出
        else if (totalReward < 0) {
            return;
        } else {
            for (int i = 0; i < rewards.length; i++) {
                ArrayList<Long> newResult = (ArrayList<Long>) result.clone(); // 由于有四种情况，需要clone当前的的解并传入被调用函数
                newResult.add(rewards[i]); // 记录当前的一项，解决一点问题
                get(totalReward - rewards[i], newResult); // 剩下的问题，留给嵌套调用
            }
        }
    }


}
